<?php
//error_reporting(E_ALL);
//ini_set('display_errors', 'On');


class Admin_UsuarioController extends Zend_Controller_Action {
    
    private $_flashMessenger;
    private $_referenciasDao;
    private $_usuarioDao;
    private $_perfilDao;
    private $_permisoDao;


    public function init() {
         $auth = Zend_Auth::getInstance();

        if ($auth->hasIdentity()) {

            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
              $this->_helper->redirector('index', 'login', 'admin');
        }
        
        $this->_flashMessenger = $this->_helper->getHelper('Mensaje');
        $this->_helper->layout()->setLayout("layout_admin");
        
        $this->_referenciasDao = new Doctrine_Model_ReferenciasDoctrineDao();
        $this->_usuarioDao = new Doctrine_Model_UsuarioDoctrineDao();
        $this->_perfilDao = new Doctrine_Model_PerfilDao();
        $this->_permisoDao = new Doctrine_Model_PermisoDao();
        $this->_sucursalDao = new Doctrine_Model_SucursalDao();
        
    }

    public function indexAction() {
        
    }
    
    public function registrarAction() {
        
        $usuario = new Doctrine_Model_Entities_Usuario();
        $usuario->setActivo(1);
        
        if ($this->getRequest()->isPost()) :
            if ($this->_hasParam("id")) :
                $id = $this->getRequest()->getParam("id");
                if ($this->_hasParam("guardar")) :
                
                    if (trim($this->getRequest()->getParam("mail")) && trim($this->getRequest()->getParam("password"))) :
                
                        $usuarioAux = $this->_usuarioDao->obtenerPorMail(trim($this->getRequest()->getParam("mail")));
                        if (!$usuarioAux) :
                            $usuario->setMail($this->getRequest()->getParam("mail"));
                            $usuario->setPassword($this->getRequest()->getParam("password"));
                            $perfil = $this->_referenciasDao->obtenerPorId("Doctrine_Model_Entities_Perfil", $this->getRequest()->getParam("perfil_id"));
                            $usuario->setPerfil($perfil);
                            $sucursal = $this->_referenciasDao->obtenerPorId("Doctrine_Model_Entities_Sucursal", $this->getRequest()->getParam("sucursal_id"));
                            $usuario->setSucursal($sucursal);
                            $usuario->setActivo($this->getRequest()->getParam("activar"));
                            if ($this->_usuarioDao->guardar($usuario)) :
                                $usuario = new Doctrine_Model_Entities_Usuario();
                                $this->_flashMessenger->addSuccess("Usuario agregado correctamente.");
                            else :
                                $this->_flashMessenger->addError("Error al intentar agregar al usuario ({$this->getRequest()->getParam("mail")}).");
                            endif;
                        else :
                            $this->_flashMessenger->addError("El usuario '{$this->getRequest()->getParam("mail")}' que intenta agregar ya EXISTE.");
                        endif;
                    
                    else :
                        $this->_flashMessenger->addError("Error!. (El E-mail y la Contraseña son requeridas).");
                    endif;
                elseif ($this->_hasParam("eliminar")) :
                    $usuario = $this->_usuarioDao->obtenerPorId($id);
                    if ($usuario) :
                        if ($this->_usuarioDao->eliminar($usuario)) :
                            $usuario = new Doctrine_Model_Entities_Usuario();
                            $this->_flashMessenger->addSuccess("Eliminado");
                        else :
                            $this->_flashMessenger->addError('Error al intentar eliminar al usuario.');
                        endif;
                    endif;
                elseif ($this->_hasParam("modificar")) :
                    $usuario = $this->_usuarioDao->obtenerPorId($id);
                    if ($usuario) :
                        $usuario->setMail($this->getRequest()->getParam("mail"));
                        $usuario->setPassword($this->getRequest()->getParam("password"));
                        $perfil = $this->_referenciasDao->obtenerPorId("Doctrine_Model_Entities_Perfil", $this->getRequest()->getParam("perfil_id"));
                        $usuario->setPerfil($perfil);
                        $sucursal = $this->_referenciasDao->obtenerPorId("Doctrine_Model_Entities_Sucursal", $this->getRequest()->getParam("sucursal_id"));
                        $usuario->setSucursal($sucursal);
                        $usuario->setActivo($this->getRequest()->getParam("activar"));
                        if ($this->_usuarioDao->guardar($usuario)) :
                            $this->_flashMessenger->addSuccess("Actualizado");
                        else :
                            $this->_flashMessenger->addError('Error al intentar actualizar el usuario.');
                        endif;
                    endif;
                endif;
            endif;
        else :
            if ($this->_hasParam("id")) :
                $usuario = $this->_usuarioDao->obtenerPorId($this->getRequest()->getParam("id"));
            endif;
        endif;
        
        $this->view->mensaje = $this->_flashMessenger->getCurrentMessages();
        $this->view->unUsuario = $usuario;
        $this->view->usuarios = $this->_usuarioDao->obtenerTodos();
        $this->view->perfiles = $this->_referenciasDao->obtenerTodos("Doctrine_Model_Entities_Perfil");
        $this->view->sucursales = $this->_referenciasDao->obtenerTodos("Doctrine_Model_Entities_Sucursal");
        
        $this->render("registrar-usuario");
    }
 
    public function permisosAction() {
        //error_reporting(E_ALL);
        //ini_set('display_errors', 'On');
        
        $perfil = new Doctrine_Model_Entities_Perfil();
        $perfil->setActivo(1);
        
        if ($this->getRequest()->isPost()) :
            if ($this->_hasParam("id")) :
                $id = $this->getRequest()->getParam("id");
                if ($this->_hasParam("guardar")) :
                    /* Datos Perfil */
                    $perfil = new Doctrine_Model_Entities_Perfil();
                    $perfil->setDescripcion($this->getRequest()->getParam("descripcion"));
                    $perfil->setActivo($this->getRequest()->getParam("activar"));
                    
                    /* Datos Permisos */
                    $ids_permisos = $this->getRequest()->getParam("permisos");
                    foreach ($ids_permisos as $id_permiso) {
                        $permiso = new Doctrine_Model_Entities_Permiso();
                        $permiso = $this->_permisoDao->obtenerPorId($id_permiso);
                        $perfil->agregarPermiso($permiso);
                    }
                    
                    if ($this->_perfilDao->guardar($perfil)) :
                        $perfil = new Doctrine_Model_Entities_Perfil();
                        $this->_flashMessenger->addSuccess("Agregado");
                    else :
                        $this->_flashMessenger->addError('Error al intentar agregar el Perfil.');
                    endif;
                elseif ($this->_hasParam("eliminar")) :
                    $perfil = $this->_perfilDao->obtenerPorId($id);
                    if ($perfil) :
                        if ($this->_perfilDao->eliminar($perfil)) :
                            $perfil = new Doctrine_Model_Entities_Perfil();
                            $this->_flashMessenger->addSuccess("Eliminado");
                        else :
                            $this->_flashMessenger->addError('Error al intentar eliminar el Perfil.');
                        endif;
                    endif;
                elseif ($this->_hasParam("modificar")) :
                    $perfil = $this->_perfilDao->obtenerPorId($id);
                    if ($perfil) :
                        /* Datos Perfil */
                        $perfil->setDescripcion($this->getRequest()->getParam("descripcion"));
                        $perfil->setActivo($this->getRequest()->getParam("activar"));
                        
                        /* Datos Permisos */
                        $perfil->limpiarPermisos();
                        $ids_permisos = $this->getRequest()->getParam("permisos");
                        foreach ($ids_permisos as $id_permiso) {
                            $permiso = new Doctrine_Model_Entities_Permiso();
                            $permiso = $this->_permisoDao->obtenerPorId($id_permiso);
                            $perfil->agregarPermiso($permiso);
                        }
                        
                        if ($this->_perfilDao->guardar($perfil)) :
                            $perfil = new Doctrine_Model_Entities_Perfil();
                            $perfil = $this->_perfilDao->obtenerPorId($id);
                            $this->_flashMessenger->addSuccess("Actualizado");
                        else :
                            $this->_flashMessenger->addError('Error al intentar actualizar el perfil.');
                        endif;
                    endif;
                endif;
            endif;
        else :
            if ($this->_hasParam("id")) :
                $perfil = $this->_perfilDao->obtenerPorId($this->getRequest()->getParam("id"));
            endif;
        endif;
        
        $this->view->mensaje = $this->_flashMessenger->getCurrentMessages();
        $this->view->perfil = $perfil;
        $this->view->permisos = $this->_permisoDao->obtenerTodos();
        $this->view->perfiles = $this->_perfilDao->obtenerTodos();
        
        $this->render("registrar-permisos");
    }
    
    public function sucursalAction() {        
        $sucursal = new Doctrine_Model_Entities_Sucursal();
        $sucursal->setActivo(1);
        
        if ($this->getRequest()->isPost()) :
            if ($this->_hasParam("id")) :
                $id = $this->getRequest()->getParam("id");
                if ($this->_hasParam("guardar")) :
                    /* Datos Perfil */
                    $sucursal = new Doctrine_Model_Entities_Sucursal();
                    $sucursal->setDescripcion($this->getRequest()->getParam("descripcion"));
                    $sucursal->setDireccion($this->getRequest()->getParam("direccion"));
                    $sucursal->setTelefonos($this->getRequest()->getParam("telefonos"));
                    $sucursal->setActivo($this->getRequest()->getParam("activar"));
                    $sucursal->setColor($this->getRequest()->getParam("color", null));
                    $sucursal->setNegocio($this->getRequest()->getParam("negocio", 0));
                    
                    if ($this->_sucursalDao->guardar($sucursal)) :
                        $this->_flashMessenger->addSuccess("Agregado");
                    else :
                        $this->_flashMessenger->addError('Error al intentar agregar el Perfil.');
                    endif;
                elseif ($this->_hasParam("eliminar")) :
                    $sucursal = $this->_sucursalDao->obtenerPorId($id);
                    if ($sucursal) :
                        if ($this->_sucursalDao->eliminar($sucursal)) :
                            $sucursal = new Doctrine_Model_Entities_Sucursal();
                            $this->_flashMessenger->addSuccess("Eliminado");
                        else :
                            $this->_flashMessenger->addError('Error al intentar eliminar el Perfil.');
                        endif;
                    endif;
                elseif ($this->_hasParam("modificar")) :
                    $sucursal = $this->_sucursalDao->obtenerPorId($id);
                    if ($sucursal) :
                        /* Datos Perfil */
                        $sucursal->setDescripcion($this->getRequest()->getParam("descripcion"));
                        $sucursal->setDireccion($this->getRequest()->getParam("direccion"));
                        $sucursal->setTelefonos($this->getRequest()->getParam("telefonos"));
                        $sucursal->setActivo($this->getRequest()->getParam("activar"));
                        $sucursal->setColor($this->getRequest()->getParam("color", null));
                        $sucursal->setNegocio($this->getRequest()->getParam("negocio", 0));
                        
                        if ($this->_sucursalDao->guardar($sucursal)) :
                            $this->_flashMessenger->addSuccess("Actualizado");
                        else :
                            $this->_flashMessenger->addError('Error al intentar actualizar el perfil.');
                        endif;
                    endif;
                endif;
            endif;
        else :
            if ($this->_hasParam("id")) :
                $sucursal = $this->_sucursalDao->obtenerPorId($this->getRequest()->getParam("id"));
            endif;
        endif;
        
        $this->view->mensaje = $this->_flashMessenger->getCurrentMessages();
        $this->view->sucursal = $sucursal;
        $this->view->sucursales = $this->_sucursalDao->obtenerTodos();
        
        $this->render("registrar-sucursal");
    }
    
}

?>
